package com.jiao.store.mapper;

import com.jiao.store.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.Date;

@Mapper

//需要在每一个mapper层写一个
public interface UserMapper {
    /**
     *  插入用户数据
     * @param user 用户的数据
     * @return 受影响行数，（增删改）
     */
   Integer inserts(User user);

    /**
     *  根据用户名查询用户数据
     * @param username 用户名
     * @return  如果找到就返回用户个人数据，如果没有就返回null值
     */
   User FindByUsername(String username);

    /**
     *
     * @param username  用户登录账号
     * @param password  用户登录密码
     * @return  返回用户对象。没有就返回null
     */
   User login(String username,String password);

    /**
     * 根据用户id修改用户的密码
     * @param uid
     * @param password
     * @return  受影响的行数
     */
    Integer updatePassWordByUid(@Param("uid") Integer uid,  @Param("password")String password,@Param("modifiedUser") String modifiedUser,@Param("modifiedTime") Date modifiedTime);

    /**
     *  查找用户的id，判断是否存在
     * @param uid
     * @return  如果找到则返回对象，找不到返回null
     */
    User FindByUid(@Param("uid")Integer uid);

    /**
     *  修改个人资料
     * @param user  可以使用string类型，但是需要声明3遍，所以使用对象类型
     * @return 受影响的行数
     */
    Integer updateInfoByUid(User user);

    /**
     * 根据用户id 来修改头像
     * @param uid  用户id
     * @param avater   用户头像
     * @param modifiedUser  修改人
     * @param modifiedTime 修改时间
     * @return
     */
    //@Param("SQL映射文件中，#{}占位符的变量名 ")：用于解决 sql语句占位符和映射接口方法参数名不一致，需要将某个参数强行注入某个占位符变量时使用@Param 来标注映射的关系
   // @PathVariable 和@Param用法一样都是用来传值，只不过Param是数据库和服务器端不一样        @PathVariable用于前后端不一样
    Integer updateAvatarById(@Param("uid") Integer uid,@Param("avater") String avater, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime") Date modifiedTime );



}
